package queuedemo;

import java.util.LinkedList;
import java.util.Queue;

//力扣题：队列实现栈
class MyStack {

    //两个队列来模拟实现栈
    public Queue<Integer> qu1;
    public Queue<Integer> qu2;

    public MyStack() {
        this.qu1 = new LinkedList<>();
        this.qu2 = new LinkedList<>();
    }

    public void push(int x) {
        //元素放在不为空的队列中
        if(!qu1.isEmpty()) {
            //qu1不为空
            qu1.offer(x);
        } else if(!qu2.isEmpty()) {
            //qu2不为空
            qu2.offer(x);
        } else {
            //都为空，放进qu1里面
            qu1.offer(x);
        }
    }

    public int pop() {
        //返回栈顶元素就要把先进队列里面的元素出到另一个队列中，个数是size - 1，队列中剩下的那一个元素就是栈顶元素
        //判断栈是不是空，空就返回-1
        if(empty()) {
            return -1;
        }
        //判断哪一个队列不是空，就把有元素那个队列的size-1元素全部存到另一个队列中

        if(qu1.isEmpty()) {
            //qu1是空,qu2不是空
            int size = qu2.size();
            for(int i = 0; i < size - 1; i++) {
                int x = qu2.poll();
                qu1.offer(x);
            }
            return qu2.poll();
        } else {
            //qu2是空，qu1不是空
            int size = qu1.size();
            for(int i = 0; i < size - 1; i++) {
                int x = qu1.poll();
                qu2.offer(x);
            }
            return qu1.poll();
        }

    }

    public int top() {
        //和pop差不多，就是peek的意思，并不删除元素
        //判断栈是不是空，空就返回-1
        if(empty()) {
            return -1;
        }
        //判断哪一个队列不是空，就把有元素那个队列的size-1元素全部存到另一个队列中

        if(qu1.isEmpty()) {
            //pu1是空
            int size = qu2.size();
            int x = -1;
            for(int i = 0; i < size; i++) {
                x = qu2.poll();
                qu1.offer(x);
            }
            return x;
        } else {
            //pu2是空
            int size = qu1.size();
            int x = -1;
            for(int i = 0; i < size; i++) {
                x = qu1.poll();
                qu2.offer(x);
            }
            return x;
        }
    }

    public boolean empty() {
        return qu1.isEmpty() && qu2.isEmpty();
    }
}
